Amazon CloudWatch Logsを使用してWindowsインスタンスからログ取得しているが、Logを表示した際に文字化けする場合の対処方法について
困っていた内容
Windows のEC2 インスタンスから実行されるバッチ処理の Log を CloudWatch Logs で取得しています。
しかし、取得した Log が文字化けをしているので困っています。
[2022/07/07 7:19:16.17] ・ス・ス・スンゑソスCLSServer.conf・ス・スCLSServer20220707.conf・スヨコ・スs・ス[・ス・ス・スワゑソス・ス・ス・スB
取得元となるファイルは文字化けを起こしていないのになぜでしょうか。
どう対応すればいいの?
原因として、CloudWatch エンコード値と転送対象ログファイルのエンコード一致されていないことが考えられます。
公式ドキュメントには、エンコード、デコードついて下記のように記載されています。
encoding – 正しく読み込むことができるように、ログファイルのエンコードを指定します。
正しくないエンコードを指定すると、デコードできない文字がその他の文字に置き換えられるため、データ損失が生じる可能性があります。 デフォルト値は utf-8 です。指定できる値は以下のとおりです。
ascii, big5, euc-jp, euc-kr, gbk, gb18030, ibm866, iso2022-jp, iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7, iso8859-8, iso8859-8-i, iso8859-10, iso8859-13, iso8859-14, iso8859-15, iso8859-16, koi8-r, koi8-u, macintosh, shift_jis, utf-8, utf-16, windows-874, windows-1250, windows-1251, windows-1252, windows-1253, windows-1254, windows-1255, windows-1256, windows-1257, windows-1258, x-mac-cyrillic
上記を参考に、以下のように記述します。
文字化けするCloudWatch エージェント設定ファイルの例
{ "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/test", "log_group_name": "/var/log/test", "log_stream_name": "{instance_id}", "timezone": "Local" } ] } } } }
追加する記述内容の例
"encoding": "shift_jis"
encoding を追加したCloudWatch エージェント設定ファイルの例
{ "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/test", "log_group_name": "/var/log/test", "log_stream_name": "{instance_id}", "encoding": "shift_jis", "timezone": "Local" } ] } } } }
CloudWatch エージェント設定ファイルの encoding 設定を、ログファイルの文字コードの形式に合わせて記述して事象が解消されるか確認してください。